package ar.edu.utn.frsf.tpae.a2013.g04.presentation.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import ar.edu.utn.frsf.tpae.a2013.g04.persistence.model.CentroCosto;
import ar.edu.utn.frsf.tpae.a2013.g04.persistence.model.Empleado;
import ar.edu.utn.frsf.tpae.a2013.g04.persistence.model.Gasto;
import ar.edu.utn.frsf.tpae.a2013.g04.presentation.util.ServiceLocator;

@ManagedBean(name="consultarGastosBean")
@SessionScoped
public class ConsultarGastosBean implements Serializable {
	
	private static final long serialVersionUID = 7327580293815095547L;
	private Map<Integer,CentroCosto> ccoMap;
	private Map<String,Empleado>     empMap;
	private List<Gasto>              gastos;
	private Integer                  centroCostoSel;
	private String                   empleadoSel;

	@PostConstruct
	public void init() {
		setGastos(new ArrayList<Gasto>());
	}
	
	public List<CentroCosto> getCentroCostoList(){
		try{
			ccoMap = new HashMap<Integer, CentroCosto>();
			List<CentroCosto> ccolist = ServiceLocator.getCentroCostoService().listar();
			for(CentroCosto q: ccolist){
				ccoMap.put(q.getId(),q);
			}
			return ccolist;
		}
		catch(RuntimeException e){
			// I ate the exception gnum gnum!!
		}
		return null;
	}
	
	public List<Empleado> getEmpleadoList(){
		try{
			empMap = new HashMap<String, Empleado>();
			List<Empleado> emplist = ServiceLocator.getEmpleadoService().listar();
			for(Empleado q: emplist){
				empMap.put(q.getNickname(),q);
			}
			return emplist;
		}
		catch(RuntimeException e){
			// I ate the exception gnum gnum!!
		}
		return null;
	}
	
	public String buscar(){
		if(new Integer(0).equals(centroCostoSel) && " ".equals(empleadoSel))
			setGastos(ServiceLocator.getSolicitudGastoService().buscarGastos());
		else if(new Integer(0).equals(centroCostoSel))
			setGastos(ServiceLocator.getSolicitudGastoService().buscarGastos(empMap.get(empleadoSel)));
		else if(" ".equals(empleadoSel))
			setGastos(ServiceLocator.getSolicitudGastoService().buscarGastos(ccoMap.get(centroCostoSel)));
		else
			setGastos(ServiceLocator.getSolicitudGastoService().buscarGastos(empMap.get(empleadoSel),
					                                                        ccoMap.get(centroCostoSel)));
		return null;
	}
	
	public Integer getCentroCostoSel() {
		return centroCostoSel;
	}
	public void setCentroCostoSel(Integer centroCostoSel) {
		this.centroCostoSel = centroCostoSel;
	}
	public String getEmpleadoSel() {
		return empleadoSel;
	}
	public void setEmpleadoSel(String empleadoSel) {
		this.empleadoSel = empleadoSel;
	}

	public List<Gasto> getGastos() {
		return gastos;
	}

	public void setGastos(List<Gasto> gastos) {
		this.gastos = gastos;
	}
	
}
